#!/bin/bash
#stty erase ^h        ##  这个的作用是让交互式界面可以使用删除键Backspace
#----------------------------------------
# 用来检查文件是否改变的脚本
# 注意下面检查变量的路径,以及存放对比文件的路径
#----------------------------------------

###-------------帮助信息-----------------
Md5_Script_Help () {
  echo ""
  echo "使用$0 [选项]  [参数]"
  echo ""
  echo "选项："
  echo "   -d 指定你要检查的目录。"
  echo "     {www|admin|api|image}.anxinp2p.com等目录。"
  echo "     {www|admin|api|image}.anxinp2p.net等目录。"
  echo "   -s 指明想要做的操作。"
  echo "     update 更新Md5值。"
  echo "     compare 对比查看Md5是否被修改。"
  echo ""
  echo "注意,使用这个程序需要事先update保存好"
  echo "相应的Md5信息，然后才能开始做对比。"
  echo ""
}

###--------------选项参数信息------------
if [ -z "$1" ]            ## 如果$1不存在
  then
    echo "请输入参数!!!"
    echo "可以输入-h查看帮助信息。"
    exit
  else
   while [ "$#" -gt 0 ];do    ## 加上下面的shift可以到后面一直叠加为$1
    case "$1" in
      -d)
       shift                             ## 把后面的变量偏移成第一个，为$1
       Script_d=$1    
       ;;
      -s)
       shift
       Script_s=$1
       ;;
      -h)
       Md5_Script_Help                                    ## 调用上面的函数，显示帮助信息
       exit                                                           ## 显示完帮助就不需要后面的程序了，直接退出
       ;;
      *)
       echo "您输入的参数有误，请重新输入!"
       echo "详细信息可以使用-h查看帮助。"
       exit 
       ;;
    esac
   shift            ## 配合上面的while
   done
fi

###----------------环境变量-----------------
# 根据实际情况来重新定义这些环境变量


# 需要检查Md5的文件夹路径
Check_Md5_Dir=/home/web/"$Script_d"
# 找出所有需要检查的文件
Check_Md5_File=`/bin/find "$Check_Md5_Dir"/ -type f`
# 存放旧Md5的文件路径
Md5_Record_File=/home/anxinp2p/nrpe/bin/Md5_Test/"$Script_d"_Md5_Record_File.txt
# 存放新Md5用于比较的文件路径
Md5_Compare_File=/home/anxinp2p/nrpe/bin/Md5_Test/"$Script_d"_Md5_Compare_File.txt


###-------------所有的函数在这里-------------
# 这个函数是把所有的Md5写到文件里去。
# 注意写入的时候是覆盖全部，所以一定要在对比后在写入
Write_Md5_to_file () {
      for Md5_num in "$Check_Md5_File";
       do
         /usr/bin/md5sum  $Md5_num
       done  > $Md5_Record_File                            ## 对比的数据正确的内容显示到文件里去
      #echo "$Check_Md5_File"|xargs -t -i /usr/bin/md5sum {}  1> $Md5_Record_File
      echo "-----------------------------------------------------"
      echo "Md5更新完毕!对应的Md5信息已经更新到了以下文件："
      echo "  $Md5_Record_File"
      echo "------------------------END--------------------------"
}

# 这个函数把最新的Md5记录到文件 
Compare_Md5_to_file () {
      for Md5_num in "$Check_Md5_File";
        do
          /usr/bin/md5sum  $Md5_num
        done > $Md5_Compare_File
#     echo "$Check_Md5_File"|xargs -t -i /usr/bin/md5sum {} 1> $Md5_Compare_File 2> /dev/null
}

# 对比两边的md5,查看是否有Md5被修改
Diff_Md5_File () {
  Compare_Md5_to_file 
  if [ `/usr/bin/diff -N $Md5_Record_File $Md5_Compare_File |wc -l` == 0 ]
    then
      echo "----------------------------------------------------"
      echo "Md5正常,没有文件发生改变。"
      echo "对应的Md5信息已经记录到了以下文件中："
      echo "  $Md5_Compare_File"
      echo "------------------------END--------------------------"
    else
      echo ""
      echo "被修改的文件如下："
      echo "-----------------------------------------------------" 
      echo "`/usr/bin/diff -N $Md5_Record_File $Md5_Compare_File |awk '/\//{print $3}'`"
      echo "------------------------END--------------------------"
      echo "被修改的文件如上↑"
      echo ""
  fi
}


###-----------------具体的判断-----------------------
#开始对比md5,查看文件是否被修改过

if [ "$Script_s" == 'update' ]  ## 如果输入的是update,那么久更新Md5信息
    then
      Write_Md5_to_file
  elif [ "$Script_s" == 'compare' ]  ## 如果输入的是compare,那么查看是否有文件被修改
    then
      Diff_Md5_File  
fi

